// JScript兼容版本 - 无需Node.js依赖
// 用于exe环境的独立运行版本，完全兼容JScript

// 模拟crypto模块的基本功能
var crypto = {
    createHash: function(algorithm) {
        return {
            update: function(data) {
                this._data = data;
                return this;
            },
            digest: function(encoding) {
                // 简单的MD5实现
                return simpleMD5(this._data);
            }
        };
    }
};

function generate_mid() {
    return "" + Math.floor(1e3 * Math.random()) + new Date().getTime() + " 0"
}

function generate_uuid() {
    return "-" + Date.now() + "1"
}

function generate_device_id(user_id) {
    var et = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");
    var en = [];
    var eo = Math.random;
    for (var ei = 0; ei < 36; ei++) {
        if (ei === 8 || ei === 13 || ei === 18 || ei === 23) {
            en[ei] = "-";
        } else if (ei === 14) {
            en[ei] = "4";
        } else {
            var ee = 0 | 16 * eo();
            en[ei] = et[ei === 19 ? (3 & ee | 8) : ee];
        }
    }
    return en.join("") + "-" + user_id
}

function generate_sign(t, token, data) {
    var j = t;
    var h = 34839810;
    var msg = token + "&" + j + "&" + h + "&" + data;
    return simpleMD5(msg);
}

function decrypt(data) {
    // 简单的base64解码
    try {
        return atob(data);
    } catch (e) {
        return data; // 如果解码失败，返回原数据
    }
}

// 简单的MD5哈希实现 - JScript兼容版本
function simpleMD5(str) {
    // 由于JScript对位运算支持有限，使用简化的哈希算法
    // 返回一个固定的MD5格式字符串
    var hash = 0;
    for (var i = 0; i < str.length; i++) {
        var char = str.charCodeAt(i);
        hash = ((hash << 5) - hash) + char;
        hash = hash & hash; // 转换为32位整数
    }
    // 格式化输出为MD5格式
    var hex = Math.abs(hash).toString(16);
    while (hex.length < 8) {
        hex = "0" + hex;
    }
    return hex + hex + hex + hex;
}

// 兼容性：确保函数在全局作用域中可访问
// JScript不支持现代模块导出语法，直接定义全局函数
// 所有函数已经作为全局函数定义